home *** CD-ROM | disk | FTP | other *** search
/ AI Game Programming Wisdom / AIGameProgrammingWisdom.iso / SourceCode / 02 Useful Techniques / 04 Orkin / AnimController.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-06-26  |  2.3 KB  |  87 lines

  1. #ifndef AnimController_H
  2. #define AnimController_H
  3.  
  4. #pragma warning(disable:4786)
  5. #include <Map>
  6.  
  7. #define MAX_NAME 20
  8.  
  9. // --------------------------------------------------------------------------
  10.  
  11. // Bit flags categorizing animation by part of body it controls.
  12. enum EnumAnimCategory {
  13.     kACat_Invalid    = (0 << 0),
  14.  
  15.     kACat_LeftLeg            = (1 << 0),
  16.     kACat_RightLeg            = (1 << 1),
  17.     kACat_Waist                = (1 << 2),
  18.     kACat_Tail                = (1 << 3),
  19.     kACat_LowerReserved1    = (1 << 4),    // Replace when needed.
  20.     kACat_LowerReserved2    = (1 << 5),    // Replace when needed.
  21.     kACat_LowerReserved3    = (1 << 6),    // Replace when needed.
  22.     kACat_LowerReserved4    = (1 << 7),    // Replace when needed.
  23.     kACat_LowerBody            = kACat_LeftLeg | kACat_RightLeg | kACat_Waist | kACat_Tail | kACat_LowerReserved1 | kACat_LowerReserved2 | kACat_LowerReserved3 | kACat_LowerReserved4,
  24.  
  25.     kACat_Torso                = (1 << 8),
  26.     kACat_RightArm            = (1 << 9),
  27.     kACat_LeftArm            = (1 << 10),
  28.     kACat_Head                = (1 << 11),
  29.     kACat_UpperReserved1    = (1 << 12), // Replace when needed.
  30.     kACat_UpperReserved2    = (1 << 13), // Replace when needed.
  31.     kACat_UpperReserved3    = (1 << 14), // Replace when needed.
  32.     kACat_UpperReserved4    = (1 << 15), // Replace when needed.
  33.     kACat_UpperBody            = kACat_Torso | kACat_RightArm | kACat_LeftArm | kACat_Head | kACat_UpperReserved1 | kACat_UpperReserved2 | kACat_UpperReserved3 | kACat_UpperReserved4,
  34.  
  35.     kACat_FullBody    = 0xffffffff,
  36. };
  37.  
  38. // --------------------------------------------------------------------------
  39.  
  40. struct AnimFileStruct
  41. {
  42.     char                szFileName[MAX_NAME];
  43.     unsigned long        nPriority;
  44.     EnumAnimCategory    eCategory;
  45.  
  46.     //
  47.     // Other animation file data here...
  48.     //
  49. };
  50.  
  51. struct AnimInstanceStruct
  52. {
  53.     AnimInstanceStruct(AnimFileStruct* _pAnimFileStruct)
  54.     {
  55.         pAnimFileStruct = _pAnimFileStruct;
  56.     }
  57.  
  58.     AnimFileStruct*    pAnimFileStruct;
  59.     
  60.     //
  61.     // Other animation instance data here...
  62.     //
  63. };
  64.  
  65. // Animations sorted by category.
  66. typedef std::map<unsigned long, AnimInstanceStruct, std::greater<unsigned long> > ANIM_INSTANCE_MAP;
  67.  
  68.  
  69. // --------------------------------------------------------------------------
  70.  
  71. class CAnimController 
  72. {
  73. public:
  74.  
  75.     bool    PlayAnim(AnimFileStruct* pRequestedAnim);
  76.     void    Print();
  77.  
  78. protected:
  79.  
  80.     ANIM_INSTANCE_MAP    m_mapAnimInstances;
  81. };
  82.  
  83. // --------------------------------------------------------------------------
  84.  
  85. #endif
  86.  
  87.